// index.js  
// 配置属性
const port = 6661;
// 初始化程序
const express = require('express');
const projectDir = __dirname;
const uploadDir = projectDir + '\\upload'
const tplFilePath = projectDir + '\\template.html'
const saveFilePath = projectDir + '\\doc\\'
// 引入文件与md库
const fs = require('fs');
const marked = require('marked');
// 上传插件
const multer = require('multer');
// 指定文件存储的目录
if (!fs.existsSync(uploadDir)) {
  fs.mkdirSync(uploadDir);
}
const upload = multer({ dest: uploadDir });
// 初始化APP
const app = express();
// 设置视图引擎为ejs
app.set('view engine', 'ejs');
app.use(express.static(__dirname + '/public'));

app.get('/', (req, res) => {
  //res.send('Hello World!');  
  res.render('index');
});

app.post('/upload', upload.single('file'), (req, res) => {
  res.setHeader('Content-Type','text/html; charset=utf-8');
  // req.file 是 'file' 字段的文件信息  
  // req.body 将包含文本域的数据，如果存在的话  
  // 定义基础模板
  var baseTmlFile = fs.readFileSync(tplFilePath);
  // 原始文件名    
  const fileName = req.file.originalname;
  // 存储在服务器上的文件路径
  const filePath = req.file.path;
  // 读取上传的文件内容
  var mdFile = fs.readFileSync(filePath);
  var mdFileStr = mdFile.toString()
  const html = marked.parse(mdFileStr);
  // 将读取的html与模板文件组成成合法的html文件
  //var content = baseTmlFile.toString().replace('replace_area', html);
  const data = req.body
  data['html'] = html
  console.log(data)
  var content = baseTmlFile.toString().replace(/\${(.*?)}/g, (match, key) => data[key]);
  // console.log(content)
  console.log("准备写入文件");
  const fname = Date.now()
  if (!fs.existsSync(saveFilePath)) {
    fs.mkdirSync(saveFilePath);
  }
  const newFile = saveFilePath + fname + '.doc';
  fs.writeFile(saveFilePath + fname + '.html', content, function (err) {
    if (err) {
      res.send({ result: null });
      return console.error(err);
    }
    console.log("html写入成功！");
  });
  fs.writeFile(newFile, content, function (err) {
    if (err) {
      res.send({ result: null });
      return console.error(err);
    }
    console.log("word写入成功！");
  });
  res.send({ result: newFile, dname: fileName, name: fname });
});

app.get('/download', async (req, res) => {
  const fname = req.query.name;
  try {
    // 读取文件内容
    const fileData = fs.readFileSync(saveFilePath + fname + '.doc');
    // 设置响应头信息
    res.setHeader('Content-Type', 'application/octet-stream');
    res.setHeader('Content-Disposition', 'attachment; filename=' + fname + '.doc');
    res.setHeader('Content-Length', fileData.length);
    // 发送文件内容作为响应  
    res.send(fileData);
  } catch (error) {
    console.error('Error reading the file:', error);
    res.status(500).send('文件下载异常');
  }
});

app.listen(port, () => {
  // 清空临时文件
  const files = fs.readdirSync(uploadDir);
  files.forEach((file) => {
    if (fs.statSync(`${uploadDir}/${file}`).isFile()) {
        fs.unlinkSync(`${uploadDir}/${file}`);
    }
});
  console.log(`启动成功，请打开：http://127.0.0.1:${port}`);
});